SĂ­tios Selecionados

Figura A2 1

Figura A2 1 SĂ­tios selecionados na base de dados TreeCo. a) latitude e longitude das coordenadas centrais dos inventĂĄrios florestais. b) boxplot de variĂĄveis dos inventĂĄrios: ĂĄrea da parcela, nĂșmero de indivĂ­duos amostrado, riqueza de espĂ©cies observado, e ano da amostragem ou da publicação. c) Classificação do estado de conservação ou sucessional da ĂĄrea amostrada no inventĂĄrio: primary (floresta primĂĄria, nĂŁo-alterada, primitiva, old-growth (≄80 anos de sucessĂŁo) ); primary/secondary (floresta em estĂĄgio avançado de sucessĂŁo (50 a 80 anos de sucessĂŁo)); secondary (floresta secundĂĄria, alterada, em estĂĄgio mĂ©dio de regeneração (20 a 50 anos de sucessĂŁo)); capoeira (floresta em estado inicial de sucessĂŁo (<20 anos de sucessĂŁo)).

Contrastes - Taxa U

Nas paisagens com pouco habitat o padrĂŁo mĂ©dio Ă© similar ao esperado em paisagens infinitas sem perda de habitat (ApĂȘndice 1): um patamar baixo de valores mĂ©dios em graus de limitação de dispersĂŁo severos; aumento brusco para um novo patamar em graus de limitação de dispersĂŁo menos severos; seguido por redução da taxa U com o aumento da capacidade de dispersĂŁo para graus brandos de limitação de dispersĂŁo (Figura A2 2 e 3). A variabilidade entre rĂ©plicas pode aumentar nos graus de limitação de dispersĂŁo pouco severos (Figura A2 2), onde hĂĄ o patamar superior de valores da taxa U nas paisagens sem perda de habitat (Figura A2 2 e 3).

Figura A2 2

Figura A2 2 Gråficos exploratórios da taxa U estimada e dos contrastes calculados. No painel da esquerda superior, coeficiente de variação da taxa U estimada por MNEE. Cada ponto representa uma bateria de simulação com 10 réplicas cada; no eixo x hå a média da taxa U e no eixo y o correspondente desvio padrão. Todas as retas passam pela origem, em preto a reta com inclinação de 1, em verde a com inclinação de 0.1, e em vermelho com inclinaçãao de 0.01. A maior parte dos pontos tem coeficiente de inclinação entre 10% e 1%. Nos paineis da direita superior e da linha de baixo hå os gråficos exploratórios dos contrastes, respectivamente: boxplots dos contrastes calculados, gråfico de dispersão dos contrastes de fragmentação per se e årea per se, e o contraste contemporùneo em função de p e colorido por k.

Figura A2 3

Figura A2 3 Taxa U estimada em cada sítio nos 20 graus de limitação de dispersão simulados. Os sítios estão organizados pela pela proporção de cobertura vegetal

Figura A2 4

Figura A2 4 GrĂĄficos explotĂĄrios dos contraste

Avaliação GAMM 1

Os GAMM utilizaram a cubic regression spline como função base nos splines simples e nos tensores entre as variåveis preditoras (Janela de código 1). A estrutura aleatória do GAMM foi específica de modo que hå um intercepto e spline de k por inventårio florestal (Janela de código 1), com os splines de k por inventårio florestal compartilhando um mesmo parùmetro de penalização (veja @Pedersen2019).

Janela de cĂłdigo 1 GAMM usado para ajustar os contrastes

f_gam <- function(df){
  gam(value ~
        s(k_z,bs = "cr") + s(p_z,bs = "cr") +
            ti(p_z,k_z) +
            s(k_z, SiteCode, bs="fs",xt=list(bs="cr")) + 
            s(SiteCode,bs="re"),
            data=df,method = "REML")
}

Janela de output R console 1 Validação dos GAMMs usados para descrever os contrastes da taxa U

## [1] "Var. resposta: efeito area"
## [1] "k.check:"
##                   k'        edf   k-index p-value
## s(k_z)             9   7.413600 0.8941608  0.0000
## s(p_z)             9   5.622889 1.1424476  1.0000
## ti(p_z,k_z)       16  14.961510 1.0047391  0.5825
## s(k_z,SiteCode) 1070 337.035140 0.8941608  0.0000
## s(SiteCode)      107  92.588654        NA      NA
## [1] "summary:"
## 
## Family: gaussian 
## Link function: identity 
## 
## Formula:
## value ~ s(k_z, bs = "cr") + s(p_z, bs = "cr") + ti(p_z, k_z) + 
##     s(k_z, SiteCode, bs = "fs", xt = list(bs = "cr")) + s(SiteCode, 
##     bs = "re")
## 
## Parametric coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  0.08133    0.00454   17.91   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Approximate significance of smooth terms:
##                     edf   Ref.df      F p-value    
## s(k_z)            7.414    8.318 72.979  <2e-16 ***
## s(p_z)            5.623    5.700 91.075  <2e-16 ***
## ti(p_z,k_z)      14.962   15.199 57.401  <2e-16 ***
## s(k_z,SiteCode) 337.035 1066.000  9.181  <2e-16 ***
## s(SiteCode)      92.589  105.000 11.271  <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## R-sq.(adj) =  0.951   Deviance explained = 96.2%
## -REML = -3056.3  Scale est. = 0.0018896  n = 2140
## [1] "gratia::appraise:"

## [1] "gratia::draw:"

## [1] "Var. resposta: efeito conf"
## [1] "k.check:"
##                   k'        edf  k-index p-value
## s(k_z)             9   7.448122 0.994416  0.3975
## s(p_z)             9   1.388721 1.218644  1.0000
## ti(p_z,k_z)       16   4.815110 1.025527  0.8600
## s(k_z,SiteCode) 1070 472.003514 0.994416  0.4000
## s(SiteCode)      107 101.985658       NA      NA
## [1] "summary:"
## 
## Family: gaussian 
## Link function: identity 
## 
## Formula:
## value ~ s(k_z, bs = "cr") + s(p_z, bs = "cr") + ti(p_z, k_z) + 
##     s(k_z, SiteCode, bs = "fs", xt = list(bs = "cr")) + s(SiteCode, 
##     bs = "re")
## 
## Parametric coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  0.27693    0.01928   14.37   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Approximate significance of smooth terms:
##                     edf   Ref.df      F p-value    
## s(k_z)            7.448    8.244  24.24  <2e-16 ***
## s(p_z)            1.389    1.396 123.84  <2e-16 ***
## ti(p_z,k_z)       4.815    4.990  29.39  <2e-16 ***
## s(k_z,SiteCode) 472.004 1066.000 218.66  <2e-16 ***
## s(SiteCode)     101.986  105.000  38.28  <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## R-sq.(adj) =  0.973   Deviance explained = 98.1%
## -REML = -1141.8  Scale est. = 0.0083167  n = 2140
## [1] "gratia::appraise:"

## [1] "gratia::draw:"

## [1] "Var. resposta: efeito frag"
## [1] "k.check:"
##                   k'        edf  k-index p-value
## s(k_z)             9   6.892299 1.059090  0.9950
## s(p_z)             9   1.000562 1.227261  1.0000
## ti(p_z,k_z)       16   4.289023 1.047488  0.9650
## s(k_z,SiteCode) 1070 503.768234 1.059090  0.9975
## s(SiteCode)      107 103.040964       NA      NA
## [1] "summary:"
## 
## Family: gaussian 
## Link function: identity 
## 
## Formula:
## value ~ s(k_z, bs = "cr") + s(p_z, bs = "cr") + ti(p_z, k_z) + 
##     s(k_z, SiteCode, bs = "fs", xt = list(bs = "cr")) + s(SiteCode, 
##     bs = "re")
## 
## Parametric coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  0.19560    0.01823   10.73   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Approximate significance of smooth terms:
##                     edf   Ref.df      F p-value    
## s(k_z)            6.892    7.754  11.63  <2e-16 ***
## s(p_z)            1.001    1.001  75.63  <2e-16 ***
## ti(p_z,k_z)       4.289    4.458  10.49  <2e-16 ***
## s(k_z,SiteCode) 503.768 1066.000 509.44  <2e-16 ***
## s(SiteCode)     103.041  105.000  53.16  <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## R-sq.(adj) =  0.974   Deviance explained = 98.1%
## -REML = -1586.1  Scale est. = 0.0050262  n = 2140
## [1] "gratia::appraise:"

## [1] "gratia::draw:"

O GAMM do contraste de ĂĄrea apresenta o melhor ajuste entre os GAMMs para os 3 contrastes. O spline indivĂ­dual para a variĂĄvel p apresenta a melhor estimativa do efeito parcial mĂ©dio, com o desvio padrĂŁo sendo mais uniforme ao longo da estimativa do efeito parcial mĂ©dio (grĂĄfico ‘s(p_z)’ no output da função ‘gratia::draw’; e outputs das funçÔes ‘mgcv::k.check’ e ‘mgcv::summary’). Os splines indivĂ­duos para a variĂĄvel p nos GAMMs dos outros dois contrastes (contemporĂąneo e fragmentação per se) apresentam estimativa do efeito mĂ©dio que tendem Ă  uma reta ; o ajuste do GAMM para o contraste de contemporaneidade parece ser mais adequado do que o fragmentação per se, pois o desvio padrĂŁo ao redor da estimativa de efeito mĂ©dio Ă© mais uniforme ao longo do gradiente da preditora (grĂĄfico ‘s(p_z)’ do output da função ‘gratia::draw’). Os 3 GAMMs nĂŁo fazem um bom ajuste de valores extremos dos contrastes (output da função ‘gratia:appraise - QQplot of residuals’), o quĂȘ explica a melhor qualidade do GAMM para o contraste de ĂĄrea per se. O deviance explained dos GAMMs foram 96.2%, 98.1% e 98.1% para os contrastes de ĂĄrea, contemporaneidade e fragmentação per se, respectivamente. As estimativas de efeitos mĂ©dios dos splines da variĂĄvel k de cada inventĂĄrio florestal podem apresentar variação qualitativa do padrĂŁo dos efeitos mĂ©dios do spline geral para a variĂĄvel k ou do tensor entre a variĂĄvel k e a variĂĄvel p (output da função ‘gratia::draw’).

Avaliação GAMM 2

Avaliação GAMMs contraste - taxa U: frag. per se ~ f(årea per se)

Janela de cĂłdigo 2 GAMM usado para ajustar os contrastes

md_frag_area <- gam(frag_z ~ 
                      s(area_z,bs="tp") + 
                      s(area_z,SiteCode,bs="fs",xt=list(bs="tp")) + 
                      s(SiteCode,bs="re"),
                      data=df,method = "REML")

Janela de output R console 2 Validação dos GAMMs usados para descrever os contrastes da taxa U

## [1] "Frag. per se ~ Area"
## [1] "k.check:"
##                      k'        edf  k-index p-value
## s(area_z)             9   8.202633 1.024628  0.8675
## s(area_z,SiteCode) 1070 150.652740 1.024628  0.8600
## s(SiteCode)         107  97.807460       NA      NA
## [1] "summary:"
## 
## Family: gaussian 
## Link function: identity 
## 
## Formula:
## frag_z ~ s(area_z, bs = "tp") + s(area_z, SiteCode, bs = "fs", 
##     xt = list(bs = "tp")) + s(SiteCode, bs = "re")
## 
## Parametric coefficients:
##             Estimate Std. Error t value Pr(>|t|)
## (Intercept)  0.07203    0.05253   1.371     0.17
## 
## Approximate significance of smooth terms:
##                        edf  Ref.df     F p-value    
## s(area_z)            8.203   8.601 16.57  <2e-16 ***
## s(area_z,SiteCode) 150.653 792.000 34.16  <2e-16 ***
## s(SiteCode)         97.807 106.000 18.43  <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## R-sq.(adj) =  0.863   Deviance explained = 87.9%
## -REML = 1322.6  Scale est. = 0.1372    n = 2140
## [1] "gratia::appraise:"

## [1] "gratia::draw:"

Contrastes - CongruĂȘncia SADs preditas

Janela de output R console 3 Validação dos GAMMs mais plausíveis

## [1] "cont.ideal"
## [1] "k.check:"
##                           k'          edf   k-index p-value
## s(contraste_z)             9   6.19210236 0.9788461  0.1675
## s(contraste_z,SiteCode) 1070 320.22559694 0.9788461  0.2125
## s(SiteCode)              107   0.04262927        NA      NA
## [1] "summary:"
## 
## Family: binomial 
## Link function: logit 
## 
## Formula:
## cbind(nCong, 500 - nCong) ~ s(contraste_z, bs = "cr") + s(contraste_z, 
##     SiteCode, bs = "fs", xt = list(bs = "cr")) + s(SiteCode, 
##     bs = "re")
## 
## Parametric coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept)  3.44078    0.08537    40.3   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Approximate significance of smooth terms:
##                               edf  Ref.df    Chi.sq p-value    
## s(contraste_z)            6.19210   6.783   134.318  <2e-16 ***
## s(contraste_z,SiteCode) 320.22560 858.000 31096.115  <2e-16 ***
## s(SiteCode)               0.04263 106.000     0.032  <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## R-sq.(adj) =   0.96   Deviance explained = 95.9%
## -REML = 9778.9  Scale est. = 1         n = 2140
## [1] "gratia::appraise:"

## [1] "gratia::draw:"

## [1] "cont.non_frag"
## [1] "k.check:"
##                   k'        edf   k-index p-value
## s(k_z)             9   6.205597 1.0260742  0.9150
## s(p_z)             9   1.002124 1.4929634  1.0000
## ti(p_z,k_z)       16   1.954249 0.9921304  0.3700
## s(k_z,SiteCode) 1070 747.189721 1.0260742  0.9025
## s(SiteCode)      107 101.324332        NA      NA
## [1] "summary:"
## 
## Family: binomial 
## Link function: logit 
## 
## Formula:
## cbind(nCong, 500 - nCong) ~ s(k_z, bs = "cr") + s(p_z, bs = "cr") + 
##     ti(p_z, k_z) + s(k_z, SiteCode, bs = "fs", xt = list(bs = "cr")) + 
##     s(SiteCode, bs = "re")
## 
## Parametric coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept)  3.27328    0.04621   70.84   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Approximate significance of smooth terms:
##                     edf   Ref.df    Chi.sq  p-value    
## s(k_z)            6.206    6.641     76.65  < 2e-16 ***
## s(p_z)            1.002    1.002     65.18  < 2e-16 ***
## ti(p_z,k_z)       1.954    1.971     18.05 0.000486 ***
## s(k_z,SiteCode) 747.190 1066.000 692244.77  < 2e-16 ***
## s(SiteCode)     101.324  105.000   4554.38  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## R-sq.(adj) =  0.941   Deviance explained = 95.7%
## -REML = 9236.4  Scale est. = 1         n = 2140
## [1] "gratia::appraise:"

## [1] "gratia::draw:"

## [1] "non_frag.ideal"
## [1] "k.check:"
##                           k'          edf   k-index p-value
## s(contraste_z)             9   5.10261835 0.9720514  0.1000
## s(contraste_z,SiteCode) 1070 191.89084119 0.9720514  0.1475
## s(SiteCode)              107   0.06131299        NA      NA
## [1] "summary:"
## 
## Family: binomial 
## Link function: logit 
## 
## Formula:
## cbind(nCong, 500 - nCong) ~ s(contraste_z, bs = "cr") + s(contraste_z, 
##     SiteCode, bs = "fs", xt = list(bs = "cr")) + s(SiteCode, 
##     bs = "re")
## 
## Parametric coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept)  3.53779    0.01802   196.3   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Approximate significance of smooth terms:
##                               edf  Ref.df   Chi.sq p-value    
## s(contraste_z)            5.10262   5.731  443.695  <2e-16 ***
## s(contraste_z,SiteCode) 191.89084 992.000 4576.608  <2e-16 ***
## s(SiteCode)               0.06131 106.000    0.056  <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## R-sq.(adj) =  0.924   Deviance explained = 86.4%
## -REML = 7249.3  Scale est. = 1         n = 2140
## [1] "gratia::appraise:"

## [1] "gratia::draw:"

CongruĂȘncia com a SAD observada

Erro na Riqueza Estimada

Figura A2 5 Gráficos Exploratórios geom_smoother(method=“gam”)

Figura A2 6 GrĂĄficos diagnĂłsticos do pacote DHARMa para o modelo mais plausĂ­vel para descrever o erro na riqueza estimada

Janela de output R console 4 sumĂĄrio do modelo mais plausĂ­vel para descrever o erro na riqueza estimada

## Linear mixed model fit by REML ['lmerMod']
## Formula: diffS ~ land_hyp * p + (1 | SiteCode)
##    Data: df_md
## 
## REML criterion at convergence: -35553
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -6.7457 -0.6278 -0.0252  0.6179  4.5786 
## 
## Random effects:
##  Groups   Name        Variance  Std.Dev.
##  SiteCode (Intercept) 7.115e-06 0.002667
##  Residual             2.239e-04 0.014962
## Number of obs: 6420, groups:  SiteCode, 107
## 
## Fixed effects:
##                      Estimate Std. Error t value
## (Intercept)        -0.0051098  0.0008413  -6.074
## land_hypideal       0.0160866  0.0009302  17.293
## land_hypnon_frag    0.0171015  0.0009302  18.384
## p                   0.0026883  0.0012736   2.111
## land_hypideal:p    -0.0089133  0.0014083  -6.329
## land_hypnon_frag:p -0.0090804  0.0014083  -6.448
## 
## Correlation of Fixed Effects:
##             (Intr) lnd_hy lnd_h_ p      lnd_h:
## land_hypidl -0.553                            
## lnd_hypnn_f -0.553  0.500                     
## p           -0.871  0.481  0.481              
## lnd_hypdl:p  0.481 -0.871 -0.435 -0.553       
## lnd_hypnn_:  0.481 -0.435 -0.871 -0.553  0.500

Pr(Cong)

## [1] "cont"
## [1] "k.check:"
##                   k'        edf   k-index p-value
## s(p_z)             9   1.045843 1.3532293  1.0000
## s(k_z)             9   7.326818 0.9740137  0.2200
## ti(p_z,k_z)       16   3.010620 0.9637999  0.0900
## s(k_z,SiteCode) 1070 671.569553 0.9740137  0.2725
## s(SiteCode)      107  69.358508        NA      NA
## [1] "summary:"
## 
## Family: binomial 
## Link function: logit 
## 
## Formula:
## cbind(nCong, 100 - nCong) ~ s(p_z, bs = "cr") + s(k_z, bs = "cr") + 
##     ti(p_z, k_z) + s(k_z, SiteCode, bs = "fs", xt = list(bs = "cr")) + 
##     s(SiteCode, bs = "re")
## 
## Parametric coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept)   2.3782     0.2356    10.1   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Approximate significance of smooth terms:
##                     edf   Ref.df    Chi.sq  p-value    
## s(p_z)            1.046    1.046 2.600e-01 0.613333    
## s(k_z)            7.327    7.738 3.658e+01 0.000147 ***
## ti(p_z,k_z)       3.011    3.080 1.016e+01 0.025597 *  
## s(k_z,SiteCode) 671.570 1066.000 2.430e+06 0.899924    
## s(SiteCode)      69.359  105.000 1.775e+02  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## R-sq.(adj) =  0.978   Deviance explained = 97.5%
## -REML = 6333.7  Scale est. = 1         n = 2140
## [1] "gratia::appraise:"

## [1] "gratia::draw:"

## [1] "ideal"
## [1] "k.check:"
##                   k'        edf   k-index p-value
## s(p_z)             9   1.002557 1.3584944    1.00
## s(k_z)             9   8.619873 0.9534021    0.05
## ti(p_z,k_z)       16   2.968157 0.9042010    0.00
## s(k_z,SiteCode) 1070 667.485317 0.9534021    0.05
## s(SiteCode)      107 102.047594        NA      NA
## [1] "summary:"
## 
## Family: binomial 
## Link function: logit 
## 
## Formula:
## cbind(nCong, 100 - nCong) ~ s(p_z, bs = "cr") + s(k_z, bs = "cr") + 
##     ti(p_z, k_z) + s(k_z, SiteCode, bs = "fs", xt = list(bs = "cr")) + 
##     s(SiteCode, bs = "re")
## 
## Parametric coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept)   2.5203     0.2317   10.88   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Approximate significance of smooth terms:
##                     edf   Ref.df    Chi.sq p-value    
## s(p_z)            1.003    1.003 9.460e-01  0.3308    
## s(k_z)            8.620    8.726 1.781e+02  <2e-16 ***
## ti(p_z,k_z)       2.968    3.001 6.286e+00  0.0957 .  
## s(k_z,SiteCode) 667.485 1066.000 4.604e+06  <2e-16 ***
## s(SiteCode)     102.048  105.000 6.474e+03  <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## R-sq.(adj) =  0.985   Deviance explained =   98%
## -REML = 6097.3  Scale est. = 1         n = 2140
## [1] "gratia::appraise:"

## [1] "gratia::draw:"

## [1] "non_frag"
## [1] "k.check:"
##                   k'        edf   k-index p-value
## s(p_z)             9   1.611166 1.3520475  1.0000
## s(k_z)             9   8.537386 0.9759630  0.2700
## ti(p_z,k_z)       16   5.547434 0.9538288  0.0475
## s(k_z,SiteCode) 1070 652.707766 0.9759630  0.2850
## s(SiteCode)      107 101.269994        NA      NA
## [1] "summary:"
## 
## Family: binomial 
## Link function: logit 
## 
## Formula:
## cbind(nCong, 100 - nCong) ~ s(p_z, bs = "cr") + s(k_z, bs = "cr") + 
##     ti(p_z, k_z) + s(k_z, SiteCode, bs = "fs", xt = list(bs = "cr")) + 
##     s(SiteCode, bs = "re")
## 
## Parametric coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept)   2.4575     0.2419   10.16   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Approximate significance of smooth terms:
##                     edf   Ref.df    Chi.sq p-value    
## s(p_z)            1.611    1.616 4.300e-01  0.6142    
## s(k_z)            8.537    8.677 1.628e+02  <2e-16 ***
## ti(p_z,k_z)       5.547    5.666 1.995e+01  0.0023 ** 
## s(k_z,SiteCode) 652.708 1066.000 4.102e+06  <2e-16 ***
## s(SiteCode)     101.270  105.000 5.562e+03  <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## R-sq.(adj) =  0.985   Deviance explained = 97.9%
## -REML = 6096.9  Scale est. = 1         n = 2140
## [1] "gratia::appraise:"

## [1] "gratia::draw:"